package uefs.springboot.rabbitmq.a1producer;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;

import user.springboot.rabbitmq.a0base.RabbitMqUtil;

/*
1、声明队列
2、创建连接
3、创建通道
4、通道声明队列
5、制定消息
6、发送消息，使用默认交换机
*/
public class A1ProducerWorkQueues {

	private static void workQueues() throws IOException, TimeoutException {
		//2.创建连接
		Connection connection = RabbitMqUtil.connectionGet();
		//3.创建频道
		Channel channel = connection.createChannel();

		//4.通道声明队列
		/**
		 * 声明队列，如果Rabbit中没有此队列将自动创建
		 * 参数1:队列名称
		 * 参数2:是否定义持久化队列(消息会持久化保存在服务器上)
		 * 参数3:是否独占本连接
		 * 参数4:是否在不使用的时候队列自动删除
		 * 参数5:其他参数
		 * String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments
		 */
		channel.queueDeclare(RabbitMqUtil.WORK_QUEUE, true, false, false, null);
		//5.发送消息
		for (int i = 0; i < 30; i++) {
			//5、制定消息
			String message = "hello world to rabbitmq for work queues" + i;
			/*
			 * 消息发布方法
			 * 参数1:交换机Exchange名称:如果没有指定空字符串(表示使用默认的交换机)使用Default Exchange
			 * 参数2:路由key-routingKey,简单模式中可以使用队列名称.是用于Exchange（交换机）将消息转发到指定的消息队列
			 * 参数3:消息其他属性
			 * 参数4:消息内容,消息体
			 * 这里没有指定交换机，消息将发送给默认交换机，每个队列也会绑定那个默认的交换机，但是不能显示绑定或解除绑定
			 * 默认的交换机，routingKey等于队列名称
			 */
			//6、发送消息，使用默认交换机
			channel.basicPublish("", RabbitMqUtil.WORK_QUEUE, null, message.getBytes());
			System.out.println("消息已发送:" + message);
		}
		//关闭资源
		RabbitMqUtil.resourceClose(channel);
		RabbitMqUtil.resourceClose(connection);
	}

	public static void main(String[] args) throws Exception {
		A1ProducerWorkQueues.workQueues();
	}
}
